home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / QuickTime / QuickTime 3 Interfaces & Libs / QTDevWin / CIncludes / DriverServices.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-08-21  |  18.0 KB  |  691 lines  |  [TEXT/dosa]

  1. /*
  2.      File:        DriverServices.h
  3.  
  4.      Contains:    Driver Services Interfaces.
  5.  
  6.      Version:    Technology:    PowerSurge 1.0.2
  7.                  Release:    QuickTime 3.0
  8.  
  9.      Copyright:    © 1985-1998 by Apple Computer, Inc., all rights reserved
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. */
  18. #ifndef __DRIVERSERVICES__
  19. #define __DRIVERSERVICES__
  20.  
  21. #ifndef __CONDITIONALMACROS__
  22. #include <ConditionalMacros.h>
  23. #endif
  24. #ifndef __MACTYPES__
  25. #include <MacTypes.h>
  26. #endif
  27. #ifndef __ERRORS__
  28. #include <Errors.h>
  29. #endif
  30. #ifndef __MACHINEEXCEPTIONS__
  31. #include <MachineExceptions.h>
  32. #endif
  33. #ifndef __DEVICES__
  34. #include <Devices.h>
  35. #endif
  36. #ifndef __DRIVERSYNCHRONIZATION__
  37. #include <DriverSynchronization.h>
  38. #endif
  39.  
  40.  
  41.  
  42. #if PRAGMA_ONCE
  43. #pragma once
  44. #endif
  45.  
  46. #ifdef __cplusplus
  47. extern "C" {
  48. #endif
  49.  
  50. #if PRAGMA_IMPORT
  51. #pragma import on
  52. #endif
  53.  
  54. #if PRAGMA_STRUCT_ALIGN
  55.     #pragma options align=power
  56. #elif PRAGMA_STRUCT_PACKPUSH
  57.     #pragma pack(push, 2)
  58. #elif PRAGMA_STRUCT_PACK
  59.     #pragma pack(2)
  60. #endif
  61.  
  62. /******************************************************************
  63.  *
  64.  *         Previously in Kernel.h
  65.  *
  66.  ******************************************************************/
  67. /* Kernel basics*/
  68. typedef struct OpaqueIOPreparationID*     IOPreparationID;
  69. typedef struct OpaqueSoftwareInterruptID*  SoftwareInterruptID;
  70. typedef struct OpaqueTaskID*             TaskID;
  71. typedef struct OpaqueTimerID*             TimerID;
  72. /* OrderedItem stuff*/
  73. typedef OSType                             OrderedItemService;
  74. typedef OSType                             OrderedItemSignature;
  75.  
  76. enum {
  77.     kMatchAnyOrderedItemService    = FOUR_CHAR_CODE('****'),
  78.     kMatchAnyOrderedItemSignature = FOUR_CHAR_CODE('****'),
  79.     kDoNotMatchAnyOrderedItemService = FOUR_CHAR_CODE('----'),
  80.     kDoNotMatchAnyOrderedItemSignature = FOUR_CHAR_CODE('----')
  81. };
  82.  
  83.  
  84. struct OrderedItemName {
  85.     OrderedItemService                 service;
  86.     OrderedItemSignature             signature;
  87. };
  88. typedef struct OrderedItemName            OrderedItemName;
  89. typedef OrderedItemName *                OrderedItemNamePtr;
  90.  
  91. typedef OptionBits                         OrderedItemOptions;
  92.  
  93. enum {
  94.     kOrderedItemIsRightBefore    = 0x00000001,
  95.     kOrderedItemIsRightAfter    = 0x00000002
  96. };
  97.  
  98.  
  99. struct OrderRequirements {
  100.     OrderedItemOptions                 options;
  101.     OrderedItemName                 itemBefore;
  102.     OrderedItemName                 itemAfter;
  103. };
  104. typedef struct OrderRequirements        OrderRequirements;
  105. typedef OrderRequirements *                OrderRequirementsPtr;
  106. /* Tasking*/
  107.  
  108. typedef UInt32                             ExecutionLevel;
  109.  
  110. enum {
  111.     kTaskLevel                    = 0,
  112.     kSoftwareInterruptLevel        = 1,
  113.     kAcceptFunctionLevel        = 2,
  114.     kKernelLevel                = 3,
  115.     kSIHAcceptFunctionLevel        = 4,
  116.     kSecondaryInterruptLevel    = 5,
  117.     kHardwareInterruptLevel        = 6
  118. };
  119.  
  120. typedef CALLBACK_API_C( void , SoftwareInterruptHandler )(void *p1, void *p2);
  121. typedef CALLBACK_API_C( OSStatus , SecondaryInterruptHandler2 )(void *p1, void *p2);
  122. #define kCurrentAddressSpaceID ((AddressSpaceID) -1)
  123.  
  124. /* Memory System basics*/
  125.  
  126. struct LogicalAddressRange {
  127.     LogicalAddress                     address;
  128.     ByteCount                         count;
  129. };
  130. typedef struct LogicalAddressRange        LogicalAddressRange;
  131. typedef LogicalAddressRange *            LogicalAddressRangePtr;
  132.  
  133. struct PhysicalAddressRange {
  134.     PhysicalAddress                 address;
  135.     ByteCount                         count;
  136. };
  137. typedef struct PhysicalAddressRange        PhysicalAddressRange;
  138. typedef PhysicalAddressRange *            PhysicalAddressRangePtr;
  139. /* For PrepareMemoryForIO and CheckpointIO*/
  140.  
  141. typedef OptionBits                         IOPreparationOptions;
  142.  
  143. enum {
  144.     kIOMultipleRanges            = 0x00000001,
  145.     kIOLogicalRanges            = 0x00000002,
  146.     kIOMinimalLogicalMapping    = 0x00000004,
  147.     kIOShareMappingTables        = 0x00000008,
  148.     kIOIsInput                    = 0x00000010,
  149.     kIOIsOutput                    = 0x00000020,
  150.     kIOCoherentDataPath            = 0x00000040,
  151.     kIOTransferIsLogical        = 0x00000080,
  152.     kIOClientIsUserMode            = 0x00000080
  153. };
  154.  
  155. typedef OptionBits                         IOPreparationState;
  156.  
  157. enum {
  158.     kIOStateDone                = 0x00000001
  159. };
  160.  
  161.  
  162. enum {
  163.     kInvalidPageAddress            = (-1)
  164. };
  165.  
  166.  
  167. struct AddressRange {
  168.     void *                            base;
  169.     ByteCount                         length;
  170. };
  171. typedef struct AddressRange                AddressRange;
  172. /* C's treatment of arrays and array pointers is atypical*/
  173.  
  174. typedef LogicalAddress *                LogicalMappingTablePtr;
  175. typedef PhysicalAddress *                PhysicalMappingTablePtr;
  176. typedef AddressRange *                    AddressRangeTablePtr;
  177.  
  178. struct MultipleAddressRange {
  179.     ItemCount                         entryCount;
  180.     AddressRangeTablePtr             rangeTable;
  181. };
  182. typedef struct MultipleAddressRange        MultipleAddressRange;
  183. /*
  184.    Separate C definition so that union has a name.  A future version of the interfacer
  185.    tool will allow a name (that gets thrown out in Pascal and Asm).
  186. */
  187.  
  188. struct IOPreparationTable {
  189.     IOPreparationOptions             options;
  190.     IOPreparationState                 state;
  191.     IOPreparationID                 preparationID;
  192.     AddressSpaceID                     addressSpace;
  193.     ByteCount                         granularity;
  194.     ByteCount                         firstPrepared;
  195.     ByteCount                         lengthPrepared;
  196.     ItemCount                         mappingEntryCount;
  197.     LogicalMappingTablePtr             logicalMapping;
  198.     PhysicalMappingTablePtr         physicalMapping;
  199.     union {
  200.         AddressRange                     range;
  201.         MultipleAddressRange             multipleRanges;
  202.     }                                 rangeInfo;
  203. };
  204. typedef struct IOPreparationTable        IOPreparationTable;
  205.  
  206. typedef OptionBits                         IOCheckpointOptions;
  207.  
  208. enum {
  209.     kNextIOIsInput                = 0x00000001,
  210.     kNextIOIsOutput                = 0x00000002,
  211.     kMoreIOTransfers            = 0x00000004
  212. };
  213.  
  214. /* For SetProcessorCacheMode*/
  215.  
  216. typedef UInt32                             ProcessorCacheMode;
  217.  
  218. enum {
  219.     kProcessorCacheModeDefault    = 0,
  220.     kProcessorCacheModeInhibited = 1,
  221.     kProcessorCacheModeWriteThrough = 2,
  222.     kProcessorCacheModeCopyBack    = 3
  223. };
  224.  
  225. /* For GetPageInformation*/
  226.  
  227.  
  228. enum {
  229.     kPageInformationVersion        = 1
  230. };
  231.  
  232. typedef UInt32                             PageStateInformation;
  233.  
  234. enum {
  235.     kPageIsProtected            = 0x00000001,
  236.     kPageIsProtectedPrivileged    = 0x00000002,
  237.     kPageIsModified                = 0x00000004,
  238.     kPageIsReferenced            = 0x00000008,
  239.     kPageIsLockedResident        = 0x00000010,
  240.     kPageIsInMemory                = 0x00000020,
  241.     kPageIsShared                = 0x00000040,
  242.     kPageIsWriteThroughCached    = 0x00000080,
  243.     kPageIsCopyBackCached        = 0x00000100,
  244.     kPageIsLocked                = kPageIsLockedResident,        /* Deprecated*/
  245.     kPageIsResident                = kPageIsInMemory                /* Deprecated*/
  246. };
  247.  
  248.  
  249. struct PageInformation {
  250.     AreaID                             area;
  251.     ItemCount                         count;
  252.     PageStateInformation             information[1];
  253. };
  254. typedef struct PageInformation            PageInformation;
  255. typedef PageInformation *                PageInformationPtr;
  256.  
  257. /*  Tasks  */
  258. EXTERN_API_C( ExecutionLevel )
  259. CurrentExecutionLevel            (void);
  260.  
  261. EXTERN_API_C( TaskID )
  262. CurrentTaskID                    (void);
  263.  
  264. EXTERN_API_C( OSStatus )
  265. DelayFor                        (Duration                 delayDuration);
  266.  
  267. EXTERN_API_C( Boolean )
  268. InPrivilegedMode                (void);
  269.  
  270.  
  271. /*  Software Interrupts  */
  272. EXTERN_API_C( OSStatus )
  273. CreateSoftwareInterrupt            (SoftwareInterruptHandler  handler,
  274.                                  TaskID                 task,
  275.                                  void *                    p1,
  276.                                  Boolean                 persistent,
  277.                                  SoftwareInterruptID *    theSoftwareInterrupt);
  278.  
  279.  
  280. EXTERN_API_C( OSStatus )
  281. SendSoftwareInterrupt            (SoftwareInterruptID     theSoftwareInterrupt,
  282.                                  void *                    p2);
  283.  
  284. EXTERN_API_C( OSStatus )
  285. DeleteSoftwareInterrupt            (SoftwareInterruptID     theSoftwareInterrupt);
  286.  
  287. #if TARGET_OS_MAC
  288. /*  Secondary Interrupts  */
  289. EXTERN_API_C( OSStatus )
  290. CallSecondaryInterruptHandler2    (SecondaryInterruptHandler2  theHandler,
  291.                                  ExceptionHandler         exceptionHandler,
  292.                                  void *                    p1,
  293.                                  void *                    p2);
  294.  
  295. EXTERN_API_C( OSStatus )
  296. QueueSecondaryInterruptHandler    (SecondaryInterruptHandler2  theHandler,
  297.                                  ExceptionHandler         exceptionHandler,
  298.                                  void *                    p1,
  299.                                  void *                    p2);
  300.  
  301. #endif  /* TARGET_OS_MAC */
  302.  
  303. /*  Timers  */
  304. EXTERN_API_C( OSStatus )
  305. SetInterruptTimer                (const AbsoluteTime *    expirationTime,
  306.                                  SecondaryInterruptHandler2  handler,
  307.                                  void *                    p1,
  308.                                  TimerID *                theTimer);
  309.  
  310. EXTERN_API_C( OSStatus )
  311. CancelTimer                        (TimerID                 theTimer,
  312.                                  AbsoluteTime *            timeRemaining);
  313.  
  314.  
  315. /*  I/O related Operations  */
  316. EXTERN_API_C( OSStatus )
  317. PrepareMemoryForIO                (IOPreparationTable *    theIOPreparationTable);
  318.  
  319. EXTERN_API_C( OSStatus )
  320. CheckpointIO                    (IOPreparationID         theIOPreparation,
  321.                                  IOCheckpointOptions     options);
  322.  
  323.  
  324. /*  Memory Operations  */
  325. EXTERN_API_C( OSStatus )
  326. GetPageInformation                (AddressSpaceID         addressSpace,
  327.                                  ConstLogicalAddress     base,
  328.                                  ItemCount                 requestedPages,
  329.                                  PBVersion                 version,
  330.                                  PageInformation *        thePageInfo);
  331.  
  332. /*  Processor Cache Related  */
  333. EXTERN_API_C( OSStatus )
  334. SetProcessorCacheMode            (AddressSpaceID         addressSpace,
  335.                                  ConstLogicalAddress     base,
  336.                                  ByteCount                 length,
  337.                                  ProcessorCacheMode     cacheMode);
  338.  
  339. /******************************************************************
  340.  *
  341.  *         Was in DriverSupport.h or DriverServices.h
  342.  *
  343.  ******************************************************************/
  344. #define    kAAPLDeviceLogicalAddress "AAPL,address"
  345.  
  346. typedef LogicalAddress *                DeviceLogicalAddressPtr;
  347.  
  348. enum {
  349.     durationMicrosecond            = -1L,                            /* Microseconds are negative*/
  350.     durationMillisecond            = 1L,                            /* Milliseconds are positive*/
  351.     durationSecond                = 1000L,                        /* 1000 * durationMillisecond*/
  352.     durationMinute                = 60000L,                        /* 60 * durationSecond,*/
  353.     durationHour                = 3600000L,                        /* 60 * durationMinute,*/
  354.     durationDay                    = 86400000L,                    /* 24 * durationHour,*/
  355.     durationNoWait                = 0L,                            /* don't block*/
  356.     durationForever                = 0x7FFFFFFF                    /* no time limit*/
  357. };
  358.  
  359.  
  360. enum {
  361.     k8BitAccess                    = 0,                            /* access as 8 bit*/
  362.     k16BitAccess                = 1,                            /* access as 16 bit*/
  363.     k32BitAccess                = 2                                /* access as 32 bit*/
  364. };
  365.  
  366. typedef UnsignedWide                     Nanoseconds;
  367.  
  368. EXTERN_API_C( OSErr )
  369. IOCommandIsComplete                (IOCommandID             theID,
  370.                                  OSErr                     theResult);
  371.  
  372. EXTERN_API_C( OSErr )
  373. GetIOCommandInfo                (IOCommandID             theID,
  374.                                  IOCommandContents *    theContents,
  375.                                  IOCommandCode *        theCommand,
  376.                                  IOCommandKind *        theKind);
  377.  
  378. EXTERN_API_C( void )
  379. UpdateDeviceActivity            (RegEntryID *            deviceEntry);
  380.  
  381. EXTERN_API_C( void )
  382. BlockCopy                        (const void *            srcPtr,
  383.                                  void *                    destPtr,
  384.                                  Size                     byteCount);
  385.  
  386. EXTERN_API_C( LogicalAddress )
  387. PoolAllocateResident            (ByteCount                 byteSize,
  388.                                  Boolean                 clear);
  389.  
  390. EXTERN_API_C( OSStatus )
  391. PoolDeallocate                    (LogicalAddress         address);
  392.  
  393. EXTERN_API_C( ByteCount )
  394. GetLogicalPageSize                (void);
  395.  
  396. EXTERN_API_C( ByteCount )
  397. GetDataCacheLineSize            (void);
  398.  
  399. EXTERN_API_C( OSStatus )
  400. FlushProcessorCache                (AddressSpaceID         spaceID,
  401.                                  LogicalAddress         base,
  402.                                  ByteCount                 length);
  403.  
  404. EXTERN_API_C( LogicalAddress )
  405. MemAllocatePhysicallyContiguous    (ByteCount                 byteSize,
  406.                                  Boolean                 clear);
  407.  
  408. EXTERN_API_C( OSStatus )
  409. MemDeallocatePhysicallyContiguous (LogicalAddress         address);
  410.  
  411.  
  412. EXTERN_API_C( AbsoluteTime )
  413. UpTime                            (void);
  414.  
  415. EXTERN_API_C( void )
  416. GetTimeBaseInfo                    (UInt32 *                minAbsoluteTimeDelta,
  417.                                  UInt32 *                theAbsoluteTimeToNanosecondNumerator,
  418.                                  UInt32 *                theAbsoluteTimeToNanosecondDenominator,
  419.                                  UInt32 *                theProcessorToAbsoluteTimeNumerator,
  420.                                  UInt32 *                theProcessorToAbsoluteTimeDenominator);
  421.  
  422.  
  423. EXTERN_API_C( Nanoseconds )
  424. AbsoluteToNanoseconds            (AbsoluteTime             absoluteTime);
  425.  
  426. EXTERN_API_C( Duration )
  427. AbsoluteToDuration                (AbsoluteTime             absoluteTime);
  428.  
  429. EXTERN_API_C( AbsoluteTime )
  430. NanosecondsToAbsolute            (Nanoseconds             nanoseconds);
  431.  
  432. EXTERN_API_C( AbsoluteTime )
  433. DurationToAbsolute                (Duration                 duration);
  434.  
  435. EXTERN_API_C( AbsoluteTime )
  436. AddAbsoluteToAbsolute            (AbsoluteTime             absoluteTime1,
  437.                                  AbsoluteTime             absoluteTime2);
  438.  
  439. EXTERN_API_C( AbsoluteTime )
  440. SubAbsoluteFromAbsolute            (AbsoluteTime             leftAbsoluteTime,
  441.                                  AbsoluteTime             rightAbsoluteTime);
  442.  
  443. EXTERN_API_C( AbsoluteTime )
  444. AddNanosecondsToAbsolute        (Nanoseconds             nanoseconds,
  445.                                  AbsoluteTime             absoluteTime);
  446.  
  447. EXTERN_API_C( AbsoluteTime )
  448. AddDurationToAbsolute            (Duration                 duration,
  449.                                  AbsoluteTime             absoluteTime);
  450.  
  451. EXTERN_API_C( AbsoluteTime )
  452. SubNanosecondsFromAbsolute        (Nanoseconds             nanoseconds,
  453.                                  AbsoluteTime             absoluteTime);
  454.  
  455. EXTERN_API_C( AbsoluteTime )
  456. SubDurationFromAbsolute            (Duration                 duration,
  457.                                  AbsoluteTime             absoluteTime);
  458.  
  459. EXTERN_API_C( Nanoseconds )
  460. AbsoluteDeltaToNanoseconds        (AbsoluteTime             leftAbsoluteTime,
  461.                                  AbsoluteTime             rightAbsoluteTime);
  462.  
  463. EXTERN_API_C( Duration )
  464. AbsoluteDeltaToDuration            (AbsoluteTime             leftAbsoluteTime,
  465.                                  AbsoluteTime             rightAbsoluteTime);
  466.  
  467. EXTERN_API_C( Nanoseconds )
  468. DurationToNanoseconds            (Duration                 theDuration);
  469.  
  470. EXTERN_API_C( Duration )
  471. NanosecondsToDuration            (Nanoseconds             theNanoseconds);
  472.  
  473.  
  474. EXTERN_API_C( OSErr )
  475. PBQueueInit                        (QHdrPtr                 qHeader);
  476.  
  477. EXTERN_API_C( OSErr )
  478. PBQueueCreate                    (QHdrPtr *                qHeader);
  479.  
  480. EXTERN_API_C( OSErr )
  481. PBQueueDelete                    (QHdrPtr                 qHeader);
  482.  
  483. EXTERN_API_C( void )
  484. PBEnqueue                        (QElemPtr                 qElement,
  485.                                  QHdrPtr                 qHeader);
  486.  
  487. EXTERN_API_C( OSErr )
  488. PBEnqueueLast                    (QElemPtr                 qElement,
  489.                                  QHdrPtr                 qHeader);
  490.  
  491. EXTERN_API_C( OSErr )
  492. PBDequeue                        (QElemPtr                 qElement,
  493.                                  QHdrPtr                 qHeader);
  494.  
  495. EXTERN_API_C( OSErr )
  496. PBDequeueFirst                    (QHdrPtr                 qHeader,
  497.                                  QElemPtr *                theFirstqElem);
  498.  
  499. EXTERN_API_C( OSErr )
  500. PBDequeueLast                    (QHdrPtr                 qHeader,
  501.                                  QElemPtr *                theLastqElem);
  502.  
  503. EXTERN_API_C( char *)
  504. CStrCopy                        (char *                    dst,
  505.                                  const char *            src);
  506.  
  507. EXTERN_API_C( StringPtr )
  508. PStrCopy                        (StringPtr                 dst,
  509.                                  ConstStr255Param         src);
  510.  
  511. EXTERN_API_C( char *)
  512. CStrNCopy                        (char *                    dst,
  513.                                  const char *            src,
  514.                                  UInt32                 max);
  515.  
  516. EXTERN_API_C( StringPtr )
  517. PStrNCopy                        (StringPtr                 dst,
  518.                                  ConstStr255Param         src,
  519.                                  UInt32                 max);
  520.  
  521. EXTERN_API_C( char *)
  522. CStrCat                            (char *                    dst,
  523.                                  const char *            src);
  524.  
  525. EXTERN_API_C( StringPtr )
  526. PStrCat                            (StringPtr                 dst,
  527.                                  ConstStr255Param         src);
  528.  
  529. EXTERN_API_C( char *)
  530. CStrNCat                        (char *                    dst,
  531.                                  const char *            src,
  532.                                  UInt32                 max);
  533.  
  534. EXTERN_API_C( StringPtr )
  535. PStrNCat                        (StringPtr                 dst,
  536.                                  ConstStr255Param         src,
  537.                                  UInt32                 max);
  538.  
  539. EXTERN_API_C( void )
  540. PStrToCStr                        (char *                    dst,
  541.                                  ConstStr255Param         src);
  542.  
  543. EXTERN_API_C( void )
  544. CStrToPStr                        (Str255                 dst,
  545.                                  const char *            src);
  546.  
  547. EXTERN_API_C( SInt16 )
  548. CStrCmp                            (const char *            s1,
  549.                                  const char *            s2);
  550.  
  551. EXTERN_API_C( SInt16 )
  552. PStrCmp                            (ConstStr255Param         str1,
  553.                                  ConstStr255Param         str2);
  554.  
  555. EXTERN_API_C( SInt16 )
  556. CStrNCmp                        (const char *            s1,
  557.                                  const char *            s2,
  558.                                  UInt32                 max);
  559.  
  560. EXTERN_API_C( SInt16 )
  561. PStrNCmp                        (ConstStr255Param         str1,
  562.                                  ConstStr255Param         str2,
  563.                                  UInt32                 max);
  564.  
  565. EXTERN_API_C( UInt32 )
  566. CStrLen                            (const char *            src);
  567.  
  568. EXTERN_API_C( UInt32 )
  569. PStrLen                            (ConstStr255Param         src);
  570.  
  571. EXTERN_API_C( OSStatus )
  572. DeviceProbe                        (void *                    theSrc,
  573.                                  void *                    theDest,
  574.                                  UInt32                 AccessType);
  575.  
  576. EXTERN_API_C( OSStatus )
  577. DelayForHardware                (AbsoluteTime             absoluteTime);
  578.  
  579.  
  580.  
  581. /******************************************************************
  582.  *
  583.  *         Was in Interrupts.h 
  584.  *
  585.  ******************************************************************/
  586. /*  Interrupt types  */
  587. typedef struct OpaqueInterruptSetID*     InterruptSetID;
  588. typedef long                             InterruptMemberNumber;
  589.  
  590. struct InterruptSetMember {
  591.     InterruptSetID                     setID;
  592.     InterruptMemberNumber             member;
  593. };
  594. typedef struct InterruptSetMember        InterruptSetMember;
  595.  
  596. enum {
  597.     kISTChipInterruptSource        = 0,
  598.     kISTOutputDMAInterruptSource = 1,
  599.     kISTInputDMAInterruptSource    = 2,
  600.     kISTPropertyMemberCount        = 3
  601. };
  602.  
  603.  
  604. typedef InterruptSetMember                 ISTProperty[3];
  605. #define kISTPropertyName    "driver-ist" 
  606.  
  607. typedef long                             InterruptReturnValue;
  608.  
  609. enum {
  610.     kFirstMemberNumber            = 1,
  611.     kIsrIsComplete                = 0,
  612.     kIsrIsNotComplete            = -1,
  613.     kMemberNumberParent            = -2
  614. };
  615.  
  616. typedef Boolean                         InterruptSourceState;
  617.  
  618. enum {
  619.     kSourceWasEnabled            = true,
  620.     kSourceWasDisabled            = false
  621. };
  622.  
  623.  
  624. typedef CALLBACK_API_C( InterruptMemberNumber , InterruptHandler )(InterruptSetMember ISTmember, void *refCon, UInt32 theIntCount);
  625. typedef CALLBACK_API_C( void , InterruptEnabler )(InterruptSetMember ISTmember, void *refCon);
  626. typedef CALLBACK_API_C( InterruptSourceState , InterruptDisabler )(InterruptSetMember ISTmember, void *refCon);
  627.  
  628. enum {
  629.     kReturnToParentWhenComplete    = 0x00000001,
  630.     kReturnToParentWhenNotComplete = 0x00000002
  631. };
  632.  
  633. typedef OptionBits                         InterruptSetOptions;
  634. /*  Interrupt Services  */
  635. EXTERN_API_C( OSStatus )
  636. CreateInterruptSet                (InterruptSetID         parentSet,
  637.                                  InterruptMemberNumber     parentMember,
  638.                                  InterruptMemberNumber     setSize,
  639.                                  InterruptSetID *        setID,
  640.                                  InterruptSetOptions     options);
  641.  
  642.  
  643. EXTERN_API_C( OSStatus )
  644. InstallInterruptFunctions        (InterruptSetID         setID,
  645.                                  InterruptMemberNumber     member,
  646.                                  void *                    refCon,
  647.                                  InterruptHandler         handlerFunction,
  648.                                  InterruptEnabler         enableFunction,
  649.                                  InterruptDisabler         disableFunction);
  650.  
  651.  
  652. EXTERN_API_C( OSStatus )
  653. GetInterruptFunctions            (InterruptSetID         setID,
  654.                                  InterruptMemberNumber     member,
  655.                                  void **                refCon,
  656.                                  InterruptHandler *        handlerFunction,
  657.                                  InterruptEnabler *        enableFunction,
  658.                                  InterruptDisabler *    disableFunction);
  659.  
  660. EXTERN_API_C( OSStatus )
  661. ChangeInterruptSetOptions        (InterruptSetID         setID,
  662.                                  InterruptSetOptions     options);
  663.  
  664. EXTERN_API_C( OSStatus )
  665. GetInterruptSetOptions            (InterruptSetID         setID,
  666.                                  InterruptSetOptions *    options);
  667.  
  668.  
  669.  
  670.  
  671. #if PRAGMA_STRUCT_ALIGN
  672.     #pragma options align=reset
  673. #elif PRAGMA_STRUCT_PACKPUSH
  674.     #pragma pack(pop)
  675. #elif PRAGMA_STRUCT_PACK
  676.     #pragma pack()
  677. #endif
  678.  
  679. #ifdef PRAGMA_IMPORT_OFF
  680. #pragma import off
  681. #elif PRAGMA_IMPORT
  682. #pragma import reset
  683. #endif
  684.  
  685. #ifdef __cplusplus
  686. }
  687. #endif
  688.  
  689. #endif /* __DRIVERSERVICES__ */
  690.  
  691.